// 快递100物流查询API
const express = require('express');
const crypto = require('crypto');
const axios = require('axios');
const cors = require('cors');
const router = express.Router();

// 快递100配置信息 - 实际使用时请替换为您的正式配置
// 您需要向快递100申请企业版授权，联系业务经理可获得10条免费测试额度
// 申请地址：https://www.kuaidi100.com/openapi/
const config = {
  customer: '您的快递100授权码', // 快递100授权码，需要申请企业版
  key: '您的接口密钥'           // 快递100接口密钥
};

// 启用CORS跨域
router.use(cors());

/**
 * 物流轨迹查询接口
 * @route GET /api/logistics
 * @param {string} com - 物流公司编码
 * @param {string} num - 快递单号
 * @param {string} [phone] - 手机号码(顺丰必填)
 * @param {string} [from] - 出发地
 * @param {string} [to] - 目的地
 * @returns {object} 物流轨迹信息
 */
router.get('/', async (req, res) => {
  try {
    const { com, num, phone, from, to } = req.query;
    
    // 验证必填参数
    if (!com || !num) {
      return res.status(400).json({ 
        error: true, 
        message: '缺少必要参数：com（快递公司编码）或 num（快递单号）' 
      });
    }
    
    // 构建请求参数
    const param = {
      com,       // 物流公司编码
      num,       // 快递单号
      phone: phone || '',     // 手机号码(顺丰必填)
      from: from || '',      // 出发地
      to: to || '',        // 目的地
      resultv2: '5', // 开通行政解析等高级功能
      show: '0',    // 返回json格式
      order: 'desc' // 降序排列
    };
    
    const paramString = JSON.stringify(param);
    
    // 生成签名: param + key + customer MD5加密后转大写
    // 注意：这里直接拼接字符串，不要使用+号作为连接符
    const sign = crypto.createHash('md5')
      .update(paramString + config.key + config.customer)
      .digest('hex')
      .toUpperCase();
    
    console.log('请求快递100 API', {
      customer: config.customer,
      sign,
      param: paramString
    });
    
    // 请求快递100 API
    const response = await axios({
      method: 'post',
      url: 'https://poll.kuaidi100.com/poll/maptrack.do',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      data: `customer=${config.customer}&sign=${sign}&param=${encodeURIComponent(paramString)}`
    });
    
    console.log('快递100 API 响应:', response.data);
    
    // 返回查询结果
    res.json(response.data);
    
  } catch (error) {
    console.error('物流查询失败:', error);
    res.status(500).json({ 
      error: true, 
      message: '物流查询失败', 
      details: error.message 
    });
  }
});

module.exports = router; 